package com.SuanFa.lanqiao;

import java.util.ArrayDeque;
import java.util.Arrays;
import java.util.Queue;
import java.util.Scanner;

//斐波那契数列
public class a9 {
    public static void main(String[] args) {
//        int m = 10000000;
//        int temp = 197;
//        for (int i = 197; i < m; i++) {
//            String s = String.valueOf(i);
//            int length = s.length();
//            //构造队列
//            int sum = 0;
//            Queue<Integer> queue = new ArrayDeque<>();
//            for (int j = 0; j < s.length(); j++) {
//                queue.add(s.charAt(j)-'0');
//                sum+=s.charAt(j)-'0';
//            }
//
//            while (true){
//                if (sum == i){
//                    temp = sum;
//                    break;
//                }
//                if(sum >i){
//                    break;
//                }
//                int tempNum = sum;
//                queue.add(tempNum);
//                sum+=tempNum;
//                if (queue.size()>length){
//                    sum-= queue.poll();
//                }
//            }
//        }
//        System.out.println(temp);
        Scanner scan = new Scanner(System.in);
        //反向遍历
        for(int i = 10000000 ; i > 0 ; i--){
            if(check(i)){// i为目标则打印结果，并结束循环
                System.out.println(i);
                break;
            }
        }
        scan.close();
    }

    /**
     *检查该数是否为类斐波那契循环数
     */
    public static boolean check(int x){
        String s = x + "";
        // 获取位数
        int l = s.length();
        int[] dp = new int[l];
        // 数x的每一位都拆出来存入数组
        for(int i = 0 ; i < l ; i++){
            dp[i] = s.charAt(i) - '0';
        }
        int sum = 0 ;
        // 迭代数组检查该数是否为类斐波那契循环数
        for(int i = l ; sum < x ; i++){
            sum = Arrays.stream(dp).sum();// 数组求和
            dp[i%l] = sum;
        }
        // 跳出循环后sum >= x
        return sum == x;
    }
}
